package com.itheima.book.feign;

import com.itheima.apis.category.ICategoryClient;
import com.itheima.book.service.CategoryAdminService;
import com.itheima.book.service.CategoryService;
import com.itheima.model.book.dtos.CategoryAdminDto;
import com.itheima.model.book.dtos.CategorySaveDto;
import com.itheima.model.common.dtos.ResponseResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * CategoryClient 实现类
 * 这个类作为ICategoryClient接口在book-service内部的实现
 * 同时也提供REST接口供Feign远程调用
 * 
 * @author itheima
 */
@Slf4j
@RestController
public class CategoryClient implements ICategoryClient {

    @Autowired
    private CategoryService categoryService;
    
    @Autowired
    private CategoryAdminService categoryAdminService;

    /**
     * 获取分类树
     */
    @Override
    @GetMapping("/api/v1/category/tree")
    public ResponseResult getCategoryTree() {
        return categoryService.getCategoryTree();
    }

    // ==================== 管理端接口实现 ====================

    /**
     * 分页查询分类列表（管理端）
     * 只负责接收参数并调用Service，具体逻辑在Service层
     */
    @Override
    @PostMapping("/api/v1/category/admin/list")
    public ResponseResult adminListCategories(@RequestBody CategoryAdminDto dto) {
        return categoryAdminService.listCategories(dto);
    }

    /**
     * 获取分类详情（管理端）
     */
    @Override
    @GetMapping("/api/v1/category/admin/{id}")
    public ResponseResult adminGetCategoryById(@PathVariable("id") Integer id) {
        return categoryAdminService.getCategoryById(id);
    }

    /**
     * 新增分类（管理端）
     */
    @Override
    @PostMapping("/api/v1/category/admin")
    public ResponseResult adminAddCategory(@RequestBody CategorySaveDto dto) {
        return categoryAdminService.addCategory(dto);
    }

    /**
     * 更新分类（管理端）
     */
    @Override
    @PutMapping("/api/v1/category/admin/{id}")
    public ResponseResult adminUpdateCategory(@PathVariable("id") Integer id, @RequestBody CategorySaveDto dto) {
        dto.setId(id);
        return categoryAdminService.updateCategory(dto);
    }

    /**
     * 删除分类（管理端）
     */
    @Override
    @DeleteMapping("/api/v1/category/admin/{id}")
    public ResponseResult adminDeleteCategory(@PathVariable("id") Integer id) {
        return categoryAdminService.deleteCategory(id);
    }

    /**
     * 更新分类状态（管理端）
     */
    @Override
    @PutMapping("/api/v1/category/admin/{id}/status")
    public ResponseResult adminUpdateCategoryStatus(@PathVariable("id") Integer id, @RequestBody Map<String, Integer> params) {
        Integer isEnabled = params.get("isEnabled");
        return categoryAdminService.updateCategoryStatus(id, isEnabled);
    }

    /**
     * 获取父级分类列表（管理端）
     */
    @Override
    @GetMapping("/api/v1/category/admin/parents")
    public ResponseResult adminGetParentCategories() {
        return categoryAdminService.getParentCategories();
    }
}

